package com.sxbbc.api.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.lang3.StringUtils;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.sxbbc.common.basics.exceptions.ThrowJsonException;
import com.sxbbc.common.basics.login.LoginDto;
import com.sxbbc.common.basics.utils.token.TokenUtils;
import com.sxbbc.common.core.utils.RedisUtils;

public class AccessInterceptor extends HandlerInterceptorAdapter {
	@Override
	public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
			throws Exception {
		// TODO Auto-generated method stub
	}

	@Override
	public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
			throws Exception {
		// TODO Auto-generated method stub
	}

	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
			throws Exception {
//		System.out.println(String.valueOf(request.getServletPath()));
//		if (handler instanceof HandlerMethod) {
//			HandlerMethod hm = (HandlerMethod) handler;
//			// 使用注解
//			AccessLimit accessLimit = hm.getMethodAnnotation(AccessLimit.class);
//			if (accessLimit == null) {
//				return true;
//			}
//			response.setCharacterEncoding("UTF-8");
//			RequestIp re = null;
//			// 取用户的真实IP
//			String ip = IPUtil.getIpAddr(request);
//			// 取session中的IP对象
//			String decrypt = RedisUtils.getInstance().getUserIP(ip);
//	        if (StringUtils.isNotBlank(decrypt)) {
//	            re = JSONObject.parseObject(decrypt, RequestIp.class);
//	        }
//	        System.out.println(re);
//			// 第一次请求
//			if (null == re) {
//				// 放入到session中
//				RequestIp reIp = new RequestIp();
//				reIp.setCreateTime(System.currentTimeMillis());
//				reIp.setReCount(1);
//				RedisUtils.getInstance().setUserIP(ip, JSON.toJSONString(reIp));
//			} else {
//				if (!(re.getUse() == null || re.getUse() == true)) {
//					return false;
//				}
//				Long createTime = re.getCreateTime();
//				if (null != createTime) {
//					if (((System.currentTimeMillis() - createTime) / 1000) > accessLimit.seconds()) {
//						// 当前时间离上一次请求时间大于3秒，可以直接通过,保存这次的请求
//						RequestIp reIp = new RequestIp();
//						reIp.setCreateTime(System.currentTimeMillis());
//						reIp.setReCount(1);
//						RedisUtils.getInstance().setUserIP(ip, JSON.toJSONString(reIp));
//					} else {
//						// 小于规定的秒，并且规定的秒之内请求了规定的次数，返回提示
//						if (re.getReCount() > accessLimit.maxCount()) {
//							RequestIp reIp = new RequestIp();
//							reIp.setUse(false);
//							RedisUtils.getInstance().setUserIPPermanent(ip, JSON.toJSONString(reIp));
//							return false;
//						} else {
//							// 小于规定的秒，但请求数小于规定的次数，给对象添加
//							re.setCreateTime(System.currentTimeMillis());
//							re.setReCount(re.getReCount() + 1);
//							RedisUtils.getInstance().setUserIP(ip, JSON.toJSONString(re));
//						}
//					}
//				}
//			}
//		}
		return true;
	}
}
